from qturboframe.lib.webdriver.exceptions import SeleniumError
from BladeFerm.Lib.Common import logger
from BladeFerm.hui_app.hui_lib.msg_box import MsgBox as HuiMsgBox

class MsgBox(HuiMsgBox):
    '''
    对操作员中心的msg_box进行封装
    '''

    def cancel_exprot(self):
        cancel_btn = self.element.find_element_by_attribute(By.CSS_SELECTOR,
                                                            'div.h-modal-footer>div>button.h-btn', 'text:取消导出')
        cancel_btn.clear()

    def close_dialog(self):
        close_btn = self.element.find_element_by_attribute(By.CSS_SELECTOR,
                                                           'div.h-modal-footer>div>button.h-btn', 'text:关闭')
        close_btn.clear()

    def check_dispaly(self, exp_flag):
        '''
        判断元素状态是否显示
        :param exp_flag: bool类型。可以是一个表达式，例如： ui_expect.get('期望结果') == '是'
        :return:
        '''
        div_attr = self.modal_dialog.get_attribute('class').split(' ')
        if 'h-modal-hidden' in div_attr:
            flag = False
        else:
            flag = True
        if flag == exp_flag:
            logger.info(f'与期望状态{exp_flag}一致。')
            return True
        else:
            logger.error(f'与期望状态{exp_flag}不一致！')
            raise SeleniumError(f'与期望状态{exp_flag}不一致！')


    def check_body_text(self, ui_except):
        '''
        检查弹框中间的文本内容是否和期望的一致
        :param ui_except:
        :return:
        '''
        if self._element.exit():
            body_div = self.element.find_element_by_attribute(By.CSS_SELECTOR, 'div.h-modal-body')
            body_text = body_div.text
            if body_text == ui_except:
                logger.info(f'检查弹框文本内容 {ui_except} 通过。')
                return True
            else:
                logger.error(f'检查弹框文本内容 {ui_except} 失败!')
                raise SeleniumError(f'检查弹框文本内容 {ui_except} 失败！')
        else:
            logger.error(f'获取弹框，查找内容 {ui_except} 失败!')
            raise SeleniumError(f'获取弹框，查找内容 {ui_except} 失败!')